/**
*职责：操作文件中的数据，只关心数据，不关心业务
*是一套异步api
*/
 
var fs = require('fs')
var dbPath = './db.json'
/**
*获取学生列表
*callback函数的第一个参数为err,错误时为错误对象，成功时为null
*   第二个参数为数据，错误时为undefined,成功时为数据
*return []
*回调函数的作用：获取函数内部异步操作的结果
*/
exports.find = function (callback) {
	fs.readFile(dbPath, 'utf8', function (err, data) {
		if (err) {
			return callback(err)
		}
		callback(null, JSON.parse(data).student)
	})
}
 
/**
*查询单个学生
*根据学生id查询这个学生的所有信息
*返回的是这个学生的信息
*/
exports.findById = function (id, callback) {
	fs.readFile(dbPath, 'utf8', function (err, data) {
		if (err) {
			return callback(err)
		}
		//先把文件里的学生信息取出来
		var students = JSON.parse(data).student
		//查询到当前学号的学生
		var stu = students.find(function (item) {
			return item.id == parseInt(id)
		})
		callback(null,stu)
	})
}
 
 
/**
*添加学生
*/
exports.save = function (currentStudent, callback) {
	fs.readFile(dbPath, 'utf8', function (err, data) {
		if (err) {
			return callback(err)
		}
		//先把文件里的学生信息取出来
		var students = JSON.parse(data).student
		//设置当前学生的id,不会重复
		currentStudent.id = students[students.length].id + 1
		if (currentStudent.gender=='0'){
			currentStudent.gender = '男'
		}else {
			currentStudent.gender = '女'
		}
		//将当前学生信息存入数组中
		students.push(currentStudent)
		//将所有信息转化成json字符串
		var fileData = JSON.stringify({
			student: students
		})
		//将所有信息放文件中
		fs.writeFile(dbPath, fileData, function (err) {
			if (err) {
				//出错了就报错误信息
				return callback(err)
			}
			//没出错执行回调函数
			callback(null)
		})
 
	})
}
 
/**
*修改学生
*/
exports.updateById = function (student, callback) {
	fs.readFile(dbPath, 'utf8', function (err, data) {
		if (err) {
			return callback(err)
		}
		var students = JSON.parse(data).student
		// 传进来的id是字符串类型
		student.id = parseInt(student.id)
		//把要修改的那个学生按学号找出来
		//find是es6里面的一个新方法
		//需要接收一个函数作为参数，当找到 item.id == student.id 时，返回那个元素或对象
		var stu = students.find(function (item) {
			return item.id == student.id
		})
		// 将修改的数据存入stu中
		for (var key in student) {
			//stu.key和stu[key]的区别
			stu[key] = student[key]
		}
		//这个学生的数据就在里面了，不需要在放进去一遍
		//修改完之后放入students中
		// students.push(stu)
		if (stu.gender == 0) {
			stu.gender = "男"
		}else {
			stu.gender = "女"
		}
		var fileData = JSON.stringify({
			student: students
		})
		fs.writeFile(dbPath, fileData, function (err) {
			if (err) {
				return callback(err)
			}
			callback(null)
		})
	})
}
 
/**
*删除学生
*/
exports.deleteById = function (id, callback) {
	fs.readFile(dbPath, function (err, data) {
		if (err) {
			return callback(err)
		}
		var students = JSON.parse(data).student
		// var stu = student.find(function (item) {
		// 	return item.id == parseInt(id)
		// })
	    // findIndex 是es6的方法，专门用来查找元素的下标
		var deleteId = students.findIndex(function (item) {
			return item.id == parseInt(id)
		})
		students.splice(deleteId, 1)
		var fileData = JSON.stringify({
			student: students
		})
		fs.writeFile(dbPath, fileData, function (err) {
			if (err) {
				return callback(err)
			}
			callback(null)
		})
 
	})
}